home *** CD-ROM | disk | FTP | other *** search
- HOW TO CRACK, by +ORC, A TUTORIAL
-
- ---------------------------------------------------------------------------
-
- Lesson 3.2: hands on, paper protections (2)
-
- ---------------------------------------------------------------------------
-
- [TOP.EXE] [F19.EXE] [POPULOUS.EXE] [MAP.EXE]
-
- --------------------------------------
-
- You have seen in the previous lesson that the use of a password
-
- protection, independently of the coding and hiding methods used
-
- to store them in memory, implies the use of a comparing procedure
-
- with the password that the user types in. You therefore have many
-
- options to begin your cracking work:
-
- - find the location of the user password
-
- - find the "echo" in memory of the real password
-
- - find the routine that compares both
-
- - find the passwords hideout and encryption type
-
- - find the go_ahead_nice_buyer exit or jump
-
- - find the beggar_off_ugly_copier exit or jump
-
- just to name the more obvious ones. In order to make things more
-
- difficult for us crackers, the protectionists have devised many
-
- counter-strategies, the more obvious ones being:
-
- - keeping the various part of the store/compare/hide routines
-
- well apart in code (no match for zen-cracking);
-
- - filling these routines with "bogus" compares, bogus jumps
-
- and bogus variables, in order to make things more difficult for
-
- the crack (no match for decent crackers);
-
- - disseminating the code with anti-debugger tricks, like INT_3
-
- instructions or jumps in and out protected mode (no match for our
-
- beloved [Soft-Ice]);
-
- - trying to eliminate the need for passwords altogether
-
- letting the user input "one letter" or "one number" or "one
-
- image" as answer to some variable question. In this lesson I'll
-
- teach you how to crack these "passletters" protection techniques.
-
- Let's first resume the "uses" of a password protection:
-
- PASSWORDS AS PERMISSION TO ACCESS
-
- These passwords serve to acknowledge that a legitimate user is
-
- using the program. This is the type of password that you'll find,
-
- for example, protecting your user account on Compuserve, on
-
- Networks or even in ATM machines used by banks or corporations.
-
- These require a little hardwiring to crack: ATM passnumber
-
- protection schemes rely on an answer from the central computer
-
- (they do NOT verify only the three magnetic areas in the magnetic
-
- strip on the card). The lines between ATM's & their hosts are
-
- usually 'weak' in the sense that the information transmitted on
-
- them is generally not encrypted in any way. (Some banks use
-
- encrypted information, but this is fairly easy to crack too).
-
- So for ATMs you should do the following 1) cross over the
-
- dedicated line between the ATM and the host; 2) insert your
-
- computer between the ATM and the host; 3) Listen to the "normal"
-
- messages and DO NOT INTERFERE YET; 4) Try out some operations
-
- with a legal card, make some mistakes, take note of the various
-
- codes; 5) When you are ready insert a fraudulent card into the
-
- ATM. Now the following happens:
-
- - the ATM sends a signal to the host, saying "Hey! Can I give
-
- this guy money, or is he broke, or is this funny card invalid?";
-
- - the microcomputer intercepts the signal from the host,
-
- discards it, sends on the "there's no one using the ATM" signal;
-
- - the host gets the "no one using" signal and sends back its
-
- "good, keep watching out if somebody comes by, and for God's sake
-
- don't spit out any money on the street!" signal to the ATM;
-
- - the microcomputer intercepts this signal (again), throws it
-
- away (again), and sends the "Wow! That guy is like TOO rich! Give
-
- him as much money as he wants. In fact, he's so loaded, give him
-
- ALL the cash we have! He is a really valued customer." signal.
-
- - the ATM obediently dispenses cash till the cows come home.
-
- All this should be possible, but as a matter of fact it has
-
- not much to do with cracking, unless there is a special software
-
- protection on the line... so if you want to work on ATMs contact
-
- our fellow phreakers/hackers and learn their trade... and
-
- please remember to hack only cash dispenser that DO NOT HAVE a
-
- control camera :=)
-
- PASSWORDS AS REGISTRATION
-
- This type of password is often used in shareware programs. When
-
- you register the shareware program, you are sent a password that
-
- you use to upgrade your shareware program to a complete and more
-
- powerful version. This method, used frequently for commercial
-
- applications, has recently been used quite a lot by many windows
-
- applications that come "crippled" on the magazines cover CD-roms,
-
- requiring you to telephone a hot line (and paying) in order to
-
- get the "unique key" to unlock the "special protection". It's all
-
- bullshit: we'll learn in the "how to crack windows" lessons how
-
- easy it is to disable the various routines that verify your
-
- entry.
-
- PASSWORDS AS COPY PROTECTIONS
-
- This type of password is often used for games and entertainment
-
- software. The password query does not usually appear any more at
-
- the start of the program, or as the program is loading. Instead,
-
- the password query appears after one or more levels are completed
-
- (this innovation was pioneered by "EOB I" and the "Ultima"
-
- series) or when the user reloads a saved game or session.
-
- DONGLE PASSWORDS
-
- A few extremely expensive programs use a dongle (also called
-
- an hardware key). A dongle is a small hardware device containing
-
- a password or checksum which plugs into either a parallel or a
-
- serial port. Some specially designed dongles even include
-
- complete program routines. Dongles can be cracked, but the amount
-
- of work involved is considerable and the trial and error
-
- procedure currently used to crack them via software is extremely
-
- tedious. It took me more than a week to crack MULTITERM,
-
- Luxembourger dongle protected program. The quickest method to
-
- crack dongle protected programs, involves the use of pretty
-
- complicated hardware devices that cannot be dealt with here. I
-
- myself have only seldom seen them, and do not like at all to
-
- crack dongles via software, coz it requires a huge amount of zen
-
- thinking and of luck and of time. If you want more information
-
- on the hardware way to crack dongles, try to contact the older
-
- ones on the appropriate web sites, they may even answer you if
-
- you are nice, humble and really technically interested.
-
- The obvious principle, that applies to the software password
-
- types mentioned above is the following: The better the password
-
- is hidden, and the better it is encrypted, the more secure the
-
- program will be. The password may be
-
- - encrypted and/or
-
- - in a hooked vector and/or
-
- - in an external file and/or
-
- - in a SMC (Self modifying code) part
-
- Let's finally inspect the common "ready_made" protection
-
- schemes (used by many programmers that do not program
-
- themselves):
-
- * password read in
-
- * letters added to a key to be entered
-
- * complement of the letters formed xoring with 255
-
- * saved key (1 char)
-
- * saved password (256 chars)
-
- * saved checksum (1 char), as protection, against simple
-
- manipulations
-
- * generating file PASSWORD.DAT with password, to be inserted
-
- inside a different file than the one containing the calling
-
- routine
-
- Now the lazy programmer that wants to "protect" his program
-
- searches first the file where the password is stored, then loads
-
- the key, the password and the checksum. He uses a decrypt
-
- procedure to decrypt the password and a check_checksum procedure
-
- to check whether the password was modified. All this is obviously
-
- crackabe in few seconds.
-
- [PASSWORD ACCESS INSIDE THE SETUP]
-
- Some computers have a password protected access INSIDE the
-
- Setup (at the beginning), the protection scheme does not allow
-
- a boot with a floppy and does not allow a setup modify. In these
-
- cases the only possible crack is an old hack method:
-
- * open the PC
-
- * find on the motherboard a small jumper (bridge) with the
-
- words "Pw"
-
- * take it away
-
- * PC on
-
- * run the setup with F1 or Del (depending from the BIOS) (the
-
- protection will not work any more)
-
- * deactivate inside the setup the option password
-
- * PC off
-
- * put the small jumper (bridge) back again
-
- * close the PC
-
- * PC on, cracked (if you want to be nasty you could now use
-
- the setup to set YOUR password)
-
- If you want to know more about access refuse and access
-
- denying, encryption and locking of the FAT tables, get from the
-
- web, and study, the (very well written) code of a virus called
-
- "Monkey", that does exactly this kind of devastation. Virus
-
- studying is, in general, very useful for cracking purposes, coz
-
- the virus'code is at times
-
- - very well written (pure, tight assembly)
-
- - using concealing techniques not much different from the
-
- protection schemes (often far superior)
-
- - using the most recent and best SMC (self modifying code)
-
- tricks
-
- But, and this is very important, do not believe that the
-
- protection schemes are very complicated! Most of the time the
-
- protection used are incredibly ordinary: as a final example of
-
- our paper protection schemes, let's take a program released not
-
- long ago (1994), but with a ridiculous protection scheme: TOP
-
- (Tiger on the prowl) a simulation from HPS.
-
- Here the cracking is straightforward:
-
- - MAP(memory_usage) and find main_sector
-
- - type "AAAA" as password
-
- - (s)earch main_sector:0 lffff "AAAA"
-
- - dump L80 "AAAA" location -40 (gives you a "wide" dump),
-
- this gives you already the "echo" of the correct password
-
- - breakpoint on memory read & write to "AAAA" location and
-
- backtrace the complete main_sector
-
- it's done! Here the code_lines that do protect TOP:
-
- 8A841C12 MOV AL,[SI+121C] move in AL first user letter
-
- 3A840812 CMP AL,[SI+1208] compare with echo
-
- 7402 JZ go_ahead_nice_buyer
-
- EB13 JMP beggar_off_ugly_cracker
-
- Now let's quickly crack it:
-
- ------------------------------------------------
-
- CRACKING TOP.EXE (by +ORC, January 1996)
-
- ren top.exe top.ded
-
- symdeb top.ded
-
- - s (cs+0000):0 Lffff 8A 84 1C 12 3A 84
-
- xxxx:yyyy (this is the answer of the debugger)
-
- - e xxxx:yyyy+2 08 (instead of 1C)
-
- - w
-
- - q
-
- ren top.ded top.exe
-
- -------------------------------------------------
-
- And you changed the MOV AL, [SI+121C] instruction in a MOV AL,
-
- [SI+1208] instruction... it is now reading the ECHO instead of
-
- the characters you typed in... no wonder that the ECHO does
-
- compare exactly with itself... and you pass!
-
- "SOMETHING FISHY UNDER COVERS"
-
- Back to the "Passletter" type of password protected programs.
-
- Let's take as an example the protection used in a game of 1990:
-
- "F19", where the protection scheme asks you to identify a
-
- particular plane's silhouette. This kind of protection is used
-
- in order to avoid the use of memory locations where the passwords
-
- are stored: we saw in the first part of our "passwords hands on"
-
- how easy it is to crack those schemes.
-
- To crack this kind of protection, you could try a technique know
-
- as "memory snuffing". The protected program, START.EXE, install
-
- itself first at location xxxx:0000 with a length of 6C62 bytes,
-
- but proceeds to a relocation of its modules (with some SMC, self
-
- modifying code parts) in different locations. What does all this
-
- mean? Well, this could mean quite many things... the most
-
- important one for crackers is that the protection code will
-
- probably snap way ahead of the actual user input phase.
-
- Now you 'll quickly find out that the routine determining
-
- (randomly) which plane is being chosen, leaves the progressive
-
- number of this plane in one memory location: (imc) 43CD:DADA.
-
- This brings us to the random triggering mechanism:
-
- E87FAF CALL random_seed
-
- 83C402 ADD SP,02
-
- 8946E8 MOV [BP-18],AX and ds:(BP-18) is the location
-
- you are looking for
-
- Now, every time this random triggers, you get a different number
-
- (00-x14) in this location, corresponding to the different plane
-
- the user should choose.
-
- The random seed routine, evidently, comes back with the random
-
- seed in AX... what we now need is to zero it: the user will
-
- always have to choose the same plane: "plane 0", and he will have
-
- given the correct answer. Note how elegant all this is: we do not
-
- need to interfere with the whole mouse pointing routines, nor
-
- with the actual choosing of the planes... the random seed may
-
- choose whatever plane it wishes... the memory location for this
-
- choice will always report the (legitimate) choice of zero.
-
- So, let's quickly crack this program:
-
- ---------------------------------------------------
-
- CRACKING "F19" [START.EXE] (by +ORC, January 1996)
-
- ren start.exe start.ded <- let's have a dead file
-
- symdeb start.ded <- let's debug it
-
- - s cs:O lffff 83 C4 02 89 46 E8 <- search ADD SP,02
-
- xxxx:yyyy <- debugger's answer
-
- - e xxxx:yyyy 58 [SPACE] 31 [SPACE] C0 [SPACE]
-
- - w <- write the crack
-
- - q <- back to the OS
-
- ren start.ded start.exe <- re-write the exe
-
- ----------------------------------------------------
-
- You just transformed the instruction you searched for
-
- 83C402 ADD SP,+02
-
- in the following sequence:
-
- 58 POP AX <- respecting ADD SP,+02
-
- 31C0 XOR AX,AX <- xoring to zero
-
- (the POP AX instruction increments the stack pointer by 2, in
-
- order to respect the previous ADD SP,+02).
-
- Well, nice. It's getting easier, isnt'it? Now let's take as
-
- example a protection that has no "echo" in memory. (At the
-
- beginning this was a smart idea: "the cracker won't find the
-
- correct password, 'coz it's not there, ah!". We'll now therefore
-
- crack one of the first programs that used this scheme:
-
- [Populous.exe], from Bullfrog.
-
- [POPULOUS.EXE]
-
- A old example of the protection scheme "password that is not
-
- a password" can be found in [Populous.exe], from Bullfrog. It's
-
- a very widespread program, and you'll surely be able to find a
-
- copy of it in order to follow this lesson. The program asks for
-
- the identification of a particular "shield", a combination of
-
- letters of various length: the memory location were the user
-
- password is stored is easily found, but there is (apparently) no
-
- "echo" of the correct password. You should be able, by now, to
-
- find by yourself the memory location were the user password is
-
- stored. Set a breakpoint memory read & write on this area, and
-
- you 'll soon come to the following section of code:
-
- F7AE4EFF IMUL WORD PTR [BP+FF4E] <- IMUL with magic_N°
-
- 40 INC AX
-
- 3B460C CMP AX, [BP+0C]
-
- 7509 JNZ beggar_off_ugly_copier
-
- 8B460C MOV AX, [BP+0C]
-
- A3822A MOV [2A82], AX
-
- E930FE JMP nice_buyer
-
- 817E0C7017CMP WORD PTR[BP+0C],1770 <- beggar_off
-
- I don't think that you need much more now... how do you prefer
-
- to crack this protection scheme? Would you choose to insert a MOV
-
- [BP+0C], AX and three NOPS (=6 bytes) after the IMUL instruction?
-
- Wouldn't you rather prefer the more elegant JMP to nice_buyer
-
- instruction at the place of the JNZ beggar_off? This solution has
-
- less nops: remember that newer protection schemes smell
-
- NOPs_patches!). Yeah, let's do it this way:
-
- ---------------------------------------------------
-
- CRACKING [Populous.exe] (by +ORC, January 1996)
-
- ren populous.exe populous.ded <- let's have a dead file
-
- symdeb populous.ded <- let's debug it
-
- - s cs:O lffff F7 AE 4E FF <- the imul magic_N°
-
- xxxx:yyyy <- debugger's answer
-
- - e xxxx:yyyy+4 EB [SPACE] 03 <- JMP anyway
-
- - w <- modify ded
-
- - q <- back to the OS
-
- ren populous.ded populous.exe <- let's re-have the exe
-
- ----------------------------------------------------
-
- This time was easy, wasnt'it?
-
- Now you are almost ready with this course... let's crack a
-
- last application, a memory utility that is very widespread, very
-
- good (the programmers at Clockwork software are Codemasters),
-
- very useful for our purposes (you'll use it later to crack a lot
-
- of TSR) and, unfortunately for Clockworkers, very easy to crack
-
- at the level you are now.
-
- But, Hey! Do not forget that you would have never done it without
-
- this tutorial, so do the following: look toward east from your
-
- window, sip a Martini-Wodka (Two blocks of ice first, 1/3 dry
-
- Martini from Martini & Rossi, 1/3 Moskovskaia Wodka, 1/3
-
- Schweppes indian tonic) and say three times: Thank-you +ORC!.
-
- [MAP.EXE]
-
- Let's now go over to one of the best TOOLS for mapping your
-
- memory usage that exist: MAP.EXE (version 2) from the masters at
-
- Clockwork software. The usage of this tool has been recommended
-
- in Lesson 2, and you should learn how to crack it, coz it comes
-
- with an annoying nag-screen ("Nigel" screen). In [Map.exe] this
-
- ubiquitous "Nigel" screen appears at random waiting for a random
-
- amount of time before asking the user to press a key which varies
-
- every time and is also selected at random.
-
- The use of a single letter -mostly encrypted with some XOR
-
- or SHR- as "password" makes the individuation of the relevant
-
- locations using "snap compares" of memory much more difficult.
-
- But the crack technique is here pretty straightforward: just
-
- break in and have a good look around you.
-
- The INT_16 routine for keyboard reading is called just after
-
- the loading of the nag screen. You 'll quickly find the relative
-
- LODSB routine inside a routine that paints on screen the word
-
- "Press" and a box-edge after a given time delay:
-
- B95000 MOV CX,0050
-
- 2EFF366601 PUSH CS:[0166]
-
- 07 POP ES
-
- AC LODSB
-
- ...
-
- You could already eliminate the delay and you could already force
-
- always the same passletter, in order to temperate the effects of
-
- the protection... but we crack deep!: let's do the job and track
-
- back the caller! The previous routine is called from the
-
- following section of the code:
-
- 91 XCHG AX,CX
-
- 6792 XCHG AX,DX
-
- 28939193 SUB [BP+DI+9391],DL
-
- 2394AA94 AND DX,[SI+94AA]
-
- 2EC7064B880100 MOV WORD PTR CS:[884B],0001
-
- 2E803E5C0106 CMP BYTE PTR CS:[015C],06
-
- 7416 JZ ret <- Ha! jumping PUSHa & POPa!
-
- 505351525756 PUSH the lot
-
- E882F3 CALL 8870
-
- 2E3B064B88 CMP AX,CS:[884B]
-
- 7307 JAE after RET <- Ha! Not taking the RET!
-
- 5E5F5A595B58 POP the lot
-
- C3 RET
-
- ... <- some more instructions
-
- E86700 CALL delay_user
-
- BE9195 MOV SI,9591
-
- 2E8B3E255C MOV DI,CS:[5C25]
-
- 83EF16 SUB DI,+16
-
- 2E8A263D01 MOV AH,CS:[013D]
-
- 50 PUSH AH
-
- E892C7 CALL routine_LODSB <-- HERE!
-
- B42C MOV AH,2C
-
- CD21 INT 21 <- get seconds in DH
-
- 80E60F AND DH,0F
-
- 80C641 ADD DH,41
-
- 58 POP AX
-
- 8AC6 MOV AL,DH
-
- 83EF04 SUB DI,+4
-
- AB STOSW
-
- E85A00 CALL INT_16_AH=01
-
- B400 MOV AH,00
-
- CD16 INT 16
-
- 24DF AND AL,DF <- code user's letter_answer
-
- 3AC6 CMP AL,DH <- pass_compare
-
- 75F3 JNZ CALL INT_16_AH=01
-
- E807F3 go_ahead
-
- You just need to look at these instructions to feel it: I
-
- think that unnecessary code segments (in this case protections)
-
- are somehow like little snakes moving under a cover: you cannot
-
- easily say what's exactly going on yet, but you could bet that
-
- there is something fishy going on. Look at the code preceding
-
- your LODSB routine call: you find two JUMPS there: a JZ ret, that
-
- leaves a lot of pusha and popa aside, and a JAE after RET, that
-
- does not take the previous ret. If you did smell something here
-
- you are thoroughly right: The first JZ triggers the NIGEL screen
-
- protection, and the second JAE does THE SAME THING (as usual,
-
- there are always redundances, exactly as there are a lot of
-
- possibilities to disable a single protection). Now you know...
-
- you can disable this protection at different points: the two
-
- easiest blueprints being
-
- 1) to change 7416 (JZ ret) in a EB16 (JMP ret anyway)
-
- 2) to change 7307 (JAE after ret) in a 7306 (JAE ret).
-
- We have not terminated yet: if you try locating this part
-
- of the code in order to change it, you won't have any luck: it's
-
- a SMC (Self modifying code) part: it is loaded -partly- from
-
- other sections of the code (here without any encryption). You
-
- must therefore first of all set a breakpoint on memory range;
-
- find out the LODSW routine; find out the real area; dump that
-
- memory region; find out a search sequence for the "dead" code...
-
- and finally modify the "dead" program.
-
- Now let's quickly crack it:
-
- ------------------------------------------------
-
- CRACKING MEM.EXE (version 2) (by +ORC, January 1996)
-
- ren map.exe map.ded
-
- symdeb map.ded
-
- - s (cs+0000):0 Lffff 74 16 50 53 51 52 57
-
- xxxx:yyyy <- this is the debugger's answer
-
- - e xxxx:yyyy EB
-
- - w
-
- - q
-
- ren map.ded map.exe
-
- -------------------------------------------------
-
- Now you have done it, NIGEL has been cracked!
-
- Well, that's it for this lesson, reader. Not all lessons of my
-
- tutorial are on the Web.
-
- You 'll obtain the missing lessons IF AND ONLY IF you mail
-
- me back (via anon.penet.fi) with some tricks of the trade I may
-
- not know that YOU discovered. Mostly I'll actually know them
-
- already, but if they are really new you'll be given full credit,
-
- and even if they are not, should I judge that you "rediscovered"
-
- them with your work, or that you actually did good work on them,
-
- I'll send you the remaining lessons nevertheless. Your
-
- suggestions and critics on the whole crap I wrote are also
-
- welcomed.
-
- E-mail +ORC
-
- +ORC an526164@anon.penet.fi
-